package leetcode.string;

import java.util.Arrays;

/**
 * 541. 反转字符串II
 * 给定一个字符串 s 和一个整数 k，从字符串开头算起，每计数至 2k 个字符，就反转这 2k 字符中的前 k 个字符。
 * <p>
 * 如果剩余字符少于 k 个，则将剩余字符全部反转。
 * 如果剩余字符小于 2k 但大于或等于 k 个，则反转前 k 个字符，其余字符保持原样。
 * <p>
 * 示例 1：
 * <p>
 * 输入：s = "abcdefg", k = 2
 * 输出："bacdfeg"
 * 示例 2：
 * <p>
 * 输入：s = "abcd", k = 2
 * 输出："bacd"
 */
public class _541 {

    public static void main(String[] args) {
        String str = reverseStr("abcd", 2);
        System.out.println("str = " + str);
    }

    public static String reverseStr(String s, int k) {
        char[] sChar = s.toCharArray();
        int point = 0;
        while (point < sChar.length) {
            int tempLeft = point;
            // 算上当前位置 往前走k位 需要－1
            point = tempLeft + k - 1;
            if (point >= sChar.length - 1) {
                point = sChar.length - 1;
            }
            reverse(sChar, tempLeft, point);
            point = tempLeft + 2 * k;
        }
        return  new String(sChar);
    }


    public static void reverse(char[] sChar, int left, int right) {
        while (left < right) {
            char temp = sChar[left];
            sChar[left] = sChar[right];
            sChar[right] = temp;
            left++;
            right--;
        }

    }

}
